import axios from "axios";
import {ElMessage} from 'element-plus'

// 创建一个axios实例对象
const instance = axios.create({
    // 使用vue-cli基于webpack构建的项目可以通过process.env获取系统变量,
    // 但在vite构建的项目中需要使用 import.meta.env来获取环境变量
    baseURL: import.meta.env.VITE_APP_BASE_URL,
    timeout: 5000,
    headers: {
        Authorization: localStorage.getItem("token") ?? "",
        "Content-Type": "application/json;charset=UTF-8"
    },
});

// 配置请求拦截器
instance.interceptors.request.use(
    (config) => {
        // todo 检查请求是否合法，是否已认证
        // 进行请求拦截处理
        return config;
    },
    (error) => {
        // 发生请求异常时处理
        console.log("请求发生异常:", error.response)
        // 弹出消息提示
        ElMessage.error(error.response.message)
        return Promise.reject(error);
    }
);

// 配置响应拦截器
instance.interceptors.response.use(
    (response) => {
        const {code, data, msg} = response.data
        console.log("响应对象:", response)
        console.log("响应数据:", data, "响应提示信息:", msg)
        // 如果响应状态码匹配则返回数据
        if (code === 200 || code === 201) {
            return response.data;
        } else {
            // 响应状态码不匹配则返回响应的msg
            return Promise.reject(msg)
        }
    },
    (error) => {
        // 发生响应异常时处理
        console.log("响应发生异常:", error.response)
        // 弹出消息提示
        ElMessage.error(error.response.message)
        return Promise.reject(error);
    }
);

export default instance;
